package com.kfm.handler;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 继承BaseTypeHandler 实现方法
 * 结果集映射 <resultMap><result typeHandler=GenderHandler></result></resultMap>  handle
 * 插入数据 #{gender,typeHandler=GenderHandler}
 */
// @MappedJdbcTypes(JdbcType.INTEGER)
public class GenderHandler extends BaseTypeHandler<String> {

    /**
     * 设置值的时候调用此方法进行转换
     * 当给数据库插入的时候注入参数调用此方法 ？ --> ps.setXxx(i,object)
     *
     * @param ps 执行sql的对象
     * @param i 第几列
     * @param parameter 实体对象中的值
     * @param jdbcType 对应的字段类型
     * @throws SQLException
     */
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
        if ("男".equals(parameter)) {
            ps.setInt(i, 1);
        } else if ("女".equals(parameter)) {
            ps.setInt(i, 0);
        } else {
            ps.setString(i, parameter);
        }

    }

    /**
     *  当获取值的时候来这个处理
     * @param rs 查询的结果集
     *          the rs
     * @param columnName 列名
     *          Column name, when configuration <code>useColumnLabel</code> is <code>false</code>
     *
     * @return
     * @throws SQLException
     */
    @Override
    public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
        // rs.getInt("gender")
        System.out.println(columnName);
        return rs.getInt(columnName) == 1 ? "男" : "女";
    }

    /**
     *
     * @param rs  结果集
     * @param columnIndex 第几列
     * @return
     * @throws SQLException
     */
    @Override
    public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        System.out.println(columnIndex);
        return rs.getInt(columnIndex) == 1 ? "男" : "女";
        // return null;
    }

    /**
     *
     * @param cs 存储过程处理对象
     * @param columnIndex 第几列
     * @return
     * @throws SQLException
     */
    @Override
    public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        System.out.println(columnIndex);
        return cs.getInt(columnIndex) == 1 ? "男" : "女";
    }
}
